const app = getApp();

const http = (options) => {

  // Promise包装，执行wx.request
  return new Promise((resolve, reject) => {
    wx.request({

      // 接口路径：url必填
      url: app.globalData.domainName + options.url,

      // 请求方式：默认GET
      method: options.method || 'get',

      // 数据负载：默认无数据
      data: options.data || {},

      //  请求标头
      header: options.header || {
        'content-type': 'application/json',
        'Cookie': 'JSESSIONID=' + app.globalData.sessionId
      },

      // wx.request调用成功
      success: (res) => {

        // 后台接口请求成功，解决
        if (res.statusCode === 200) {

          if (res.data.success) {
            // 成功：传递正常数据
            resolve(res.data.data);

          } else {
            // 失败：传递完整错误
            reject(res.data)
          }

          // 后台接口请求失败
        } else {

          // 传递完整错误：模拟服务端 Result包装
          reject({
            success: false,
            code: res.statusCode,
            message: '数据请求失败',
            data: res.data
          });

        }

      },

      // wx.request调用失败
      fail: (err) => {

        // 传递完整错误
        reject({
          success: false,
          code: err.statusCode || 201,
          message: '数据请求失败',
          data: err
        })

      }

    })
  }).then(

    // 处理resolve传递的正常数据
    (data) => {
      options.success ?
        options.success(data) : console.log(data);
    },

    // 处理reject传递的完整错误
    (err) => {
      /*
        错误提示在这里统一处理
      */

      // 统一弹窗提醒
      wx.showModal({
        title: '提示',
        content: err.message,
      });
      
      options.fail ?
        options.fail(data) : console.log(err);
    });

}

// 模块导出
export default http